package test

import "github.com/kataras/iris/v12"

func JsonRoute(app *iris.Application)  {
	// iris.Map是map [string] interface {}的别名
	app.Get("/json", func(ctx iris.Context) {
		ctx.JSON(iris.Map{"message": "hello", "status": iris.StatusOK})
	})

	//使用安全字段来防止json劫持。
	//当数据为数组时，它将'“ while（1），”`附加到主体上。
	app.Get("/json_secure", func(ctx iris.Context) {
		response := []string{"val1", "val2", "val3"}
		options := iris.JSON{Indent: "", Secure: true}
		ctx.JSON(response, options)

		// 将输出字符串: while(1);["val1","val2","val3"]
	})

	//使用ASCII字段生成带有转义的非ASCII字符的纯ASCII JSON
	app.Get("/json_ascii", func(ctx iris.Context) {
		response := iris.Map{"lang": "GO-虹膜", "tag": "<br>"}
		options := iris.JSON{Indent: "    ", ASCII: true}
		ctx.JSON(response, options)

		/* Will output:
		   {
		       "lang": "GO-\u8679\u819c",
		       "tag": "\u003cbr\u003e"
		   }
		*/
	})

	//通常，JSON用其unicode实体替换特殊的HTML字符。
	//如果您想按字面意义编码此类字符，//应该将UnescapeHTML字段设置为true。
	app.Get("/json_raw", func(ctx iris.Context) {
		options := iris.JSON{UnescapeHTML: true}
		ctx.JSON(iris.Map{
			"html": "<b>Hello, world!</b>",
		}, options)

		// Will output: {"html":"<b>Hello, world!</b>"}
	})

	app.Get("/json_struct", func(ctx iris.Context) {
		// You also can use a struct.
		var msg struct {
			Name    string `json:"user"`
			Message string
			Number  int
		}
		msg.Name = "Mariah"
		msg.Message = "hello"
		msg.Number = 42
//注意，msg.Name在JSON中成为“用户”。
//Will output: {"user": "Mariah", "Message": "hello", "Number": 42}
		ctx.JSON(msg)
	})

	app.Get("/jsonp", func(ctx iris.Context) {
		ctx.JSONP(iris.Map{"hello": "jsonp"}, iris.JSONP{Callback: "callbackName"})
	})

	app.Get("/xml", func(ctx iris.Context) {
		ctx.XML(iris.Map{"message": "hello", "status": iris.StatusOK})
	})

	app.Get("/markdown", func(ctx iris.Context) {
		ctx.Markdown([]byte("# Hello Dynamic Markdown -- iris"))
	})

	app.Get("/yaml", func(ctx iris.Context) {
		ctx.YAML(iris.Map{"message": "hello", "status": iris.StatusOK})
	})

	app.Get("/msgpack", func(ctx iris.Context) {
		u := User{
			FirstName: "John",
			LastName:  "Doe",
			Email:      "Neither FBI knows!!!",
			Age:       25,
		}

		ctx.MsgPack(u)
	})
}
